﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace ConsoleLetsDoIt
{
    public partial class frmParserComments : Form
    {
        public frmParserComments()
        {
            InitializeComponent();
        }
        //осуществляем поиск комментариев
        private void button1_Click(object sender, EventArgs e)
        {
            Parser pars=new Parser(); //создаем экземпляр класса Parser
            string code = txtBxMain.Text; //в переменную code помещаем текст из txtBxMain
            string[] codelines = txtBxMain.Lines; //в массив строк codelines помещаем строки из txtBxMain

            if (pars != null)//если он не равен нулю
            {
                pars.WorkIsDone += this.workCompleted;//добавляем в экземпляр класса Parser 
                pars.Analyse(codelines, code);//добавляем в экземпляр класса Parser локальные переменные
            }
        }

        //метод инициализации события
        private void workCompleted(object sender, ParserEventArgs e)
        {
            string[] comments = e.Comments;//объявляем массив строк и присваиваем ему значение
            string multilinecomments = e.Multilinecomments;//объявляем строку и присваиваем ей значение
            txtBxCommon.Text = comments[0]; //помещаем первый элемент массива comments в txtBxCommon
            txtBxXML.Text = comments[1]; //помещаем второй элемент массива comments в txtBxXML
            txtBxMultiline.Text = multilinecomments; //строку multilinecomments помещаем в txtBxMultiline
        }

        //очищаем главное окно программы
        private void button2_Click(object sender, EventArgs e)
        {
            txtBxMain.Text = "";//очищаем окно ввода
        }
        //считываем с файла
        private void button3_Click(object sender, EventArgs e)
        {
            openFlDlg1.Filter = "CS file(*.cs)|*.cs|Text files(*.txt)|*txt";//мы устанавливаем фильтр на возможность открытия файла формата *.cs или *.txt
            openFlDlg1.Title = "Где будем искать комментарии?";//выводим в строке
            openFlDlg1.InitialDirectory = "C:";//начальный путь-диск С
            if (openFlDlg1.ShowDialog() == DialogResult.OK)//если операция подтверждается, то
            {
                string strFileName = openFlDlg1.FileName;//объявляем строку и помещаем в нее название пути файла
                if (strFileName == String.Empty)//если встречаем пустую строку
                {
                    MessageBox.Show("Вы не выбрали файл");//выводим сообщение
                }
                else//если файл выбран
                {
                    string[] codefromfile = File.ReadAllLines(strFileName);//считываем данные в массив
                    string codefromfilefortextbox = "";//объявляем строку и присваиваем ей значение пробела
                    for (int j = 0; j < codefromfile.Length; j++)//проходимся по длине массива
                    {
                       codefromfilefortextbox+=codefromfile[j]+"\r\n";//заносим данные в новый массив
                     
                    }
                    txtBxMain.Text = codefromfilefortextbox;//выводим в текстбоксе данные
                }
            }
        }
        //очищаем окна программы, выводящие комментарии
        private void button4_Click(object sender, EventArgs e)
        {
            txtBxCommon.Text = "";//очищение окна основных комментариев
            txtBxXML.Text = "";//очищение окна XML-комментариев
            txtBxMultiline.Text = "";//очищение окна с многострочными комментариями
        }

        //инициализация новой формы 
        private void aboutTheDevelopersToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Aboutdevelop newdevelop = new Aboutdevelop();//создаем объект класса Aboutdevelop
            newdevelop.Show();//открытие формы "О разработчиках"
        }
        //инициализация новой формы
        private void aboutTheProgramToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Aboutprog newprog = new Aboutprog();//создаем объект класса Aboutprog
            newprog.Show();//открытие формы "О программе"
        }
        //инициализация новой формы
        private void helpTlStrpMnItem_Click(object sender, EventArgs e)
        {
            Help newhelp = new Help();//создаем объект класса Help
            newhelp.Show();//открытие формы "Помощь"
        }
        //метод закрытия формы
        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();//закрываваем форму
        }

        //привыязываем границы к форме
        private void frmParserComments_Resize(object sender, EventArgs e)
        {
            //задаем ширину для каждого textBox`а из четырех
            //задаем ширину окна ввода текста путем деления всей ширины на 4 и вычитания 20
            txtBxMain.Width = this.Width / 4 - 20;
            //то же самое делаем и для окна вывода обычных комментариев
            txtBxCommon.Width = this.Width / 4 - 20;
            //то же самое делаеи и для окна вывода многострочных комментариев
            txtBxMultiline.Width = this.Width / 4 - 20;
            //то же самое делаем и для XML-комментариев
            txtBxXML.Width = this.Width / 4 - 20;
            //задаем местоположение для каждого textBox`a из четырех
            //задаем положение окна ввода текста
            txtBxMain.Left = 5;
            //задаем положение окна вывода обычных комментариев
            txtBxCommon.Left = this.Width / 4 + 5;
            //задаем положение окна вывода XML-комментариев
            txtBxXML.Left = this.Width * 2 / 4 + 5;
            //задаем положение окна вывода многострочных комментариев
            txtBxMultiline.Left = this.Width * 3 / 4 + 5;
            //задаем положение для label(по ширине совпадает с верхним левым углом окна обычных комментариев, по высоте фиксированно-32)
            label1.Location = new Point(txtBxCommon.Left, 32);
            //то же самое, только по ширине совпадает с верхним левым углом окна XML-комментариев
            label2.Location = new Point(txtBxXML.Left, 32);
            //то же самое, только по ширине совпадает с верхним левым углом окна многострочных комментариев
            label3.Location = new Point(txtBxMultiline.Left, 32);
            


        }

     
    
    }
}
